home *** CD-ROM | disk | FTP | other *** search
Makefile | 1995-07-04 | 17.4 KB | 577 lines |
- #
- # $Id: Makefile,v 1.99 1995/01/08 23:23:23 geoff Exp $
- #
- # Copyright 1992, 1993, Geoff Kuenning, Granada Hills, CA
- # All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions
- # are met:
- #
- # 1. Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # 2. Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in the
- # documentation and/or other materials provided with the distribution.
- # 3. All modifications to the source code must be clearly marked as
- # such. Binary redistributions based on modified source code
- # must be clearly marked as modified versions in the documentation
- # and/or other materials provided with the distribution.
- # 4. All advertising materials mentioning features or use of this software
- # must display the following acknowledgment:
- # This product includes software developed by Geoff Kuenning and
- # other unpaid contributors.
- # 5. The name of Geoff Kuenning may not be used to endorse or promote
- # products derived from this software without specific prior
- # written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND
- # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE
- # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- # SUCH DAMAGE.
- #
- # You will have to create a local.h file before building; look over
- # config.X to learn what things you may need to define, or use one of
- # the sample local.h files shipped.
- #
- # the argument syntax for buildhash to make alternate dictionary files
- # is simply:
- #
- # buildhash <dictfile> <affix-file> <outfile>
-
- # $Log: Makefile,v $
- # Revision 1.99 1995/01/08 23:23:23 geoff
- # Get rid of an obsolete etags flag. Add some new variables to config.sh.
- #
- # Revision 1.98 1994/12/27 23:08:43 geoff
- # Use the new "iwhich" script to decide whether to install emacs-related
- # stuff. Make correct.o depend on version.h so that "ispell -a" always
- # reports the correct version.
- #
- # Revision 1.97 1994/11/21 07:02:51 geoff
- # Specify default values for the BUILD macros, so that some systems
- # don't accidentally override them and make ispell think that the
- # dictionaries are missing.
- #
- # Revision 1.96 1994/10/25 05:45:54 geoff
- # Make the installation command configurable.
- #
- # Revision 1.95 1994/10/18 04:03:17 geoff
- # Get rid of DICTVARIANTS, which is obsolete. Compile term.o first, so
- # that errors in it (which are common) will show up first. Improve the
- # rules for generation of msgs.h.
- #
- # Revision 1.94 1994/09/16 05:06:55 geoff
- # Split installation up into basic and dictionary-building tools, so
- # that we can have a partial-install target.
- #
- # Revision 1.93 1994/09/16 04:51:28 geoff
- # Handle installations that have ELISPDIR but not TEXINFODIR
- #
- # Revision 1.92 1994/09/16 02:45:52 geoff
- # Don't strip non-binaries. Fix an accidentally-doubled backslash.
- #
- # Revision 1.91 1994/08/31 05:58:27 geoff
- # Strip binaries before installing them. Create directories before
- # installing into them. Make sure manual pages are installed with the
- # correct protection modes.
- #
- # Revision 1.90 1994/05/25 04:29:16 geoff
- # Don't remove english.4 after the English makefile has carefully
- # installed it.
- #
- # Revision 1.89 1994/05/24 05:31:22 geoff
- # Return to the old sed-based method of parsing LANGUAGES, so that things
- # will work on broken systems like BSDI.
- #
- # Revision 1.88 1994/05/24 04:54:30 geoff
- # Fix the emacs installation to use emacs batch mode properly, so that a
- # terminal isn't required.
- #
- # Revision 1.87 1994/03/21 01:55:17 geoff
- # If a hard link can't be made to msgs.h, copy it instead
- #
- # Revision 1.86 1994/02/22 06:09:03 geoff
- # Add SHELLDEBUG. Change the language-subdirs target to use the shell
- # IFS variable to parse things, simplifying things and improving
- # efficiency (thanks to Hagen Ross for the idea and implemenation).
- #
- # Revision 1.85 1994/02/13 23:25:31 geoff
- # Fix multiple-language processing to not pass subsequent specifications to
- # the first Makefile. Also fix the language shell loop to be more flexible.
- #
- # Revision 1.84 1994/02/07 08:10:40 geoff
- # When processing the LANGUAGES configuration variable (from local.h),
- # use sed instead of expr to process it. This gets around versions of
- # expr that have 127-character limitations (though it probably still
- # limits us to 512 characters with some versions of sed, so further work
- # may be needed here).
- #
- # Revision 1.83 1994/02/07 06:31:20 geoff
- # Clarify how to change variables in local.h
- #
- # Revision 1.82 1994/02/07 06:29:31 geoff
- # Add a dummy else clause to shell if-test for Ultrix
- #
- # Revision 1.81 1994/02/07 05:35:34 geoff
- # Make realclean run dictclean
- #
- # Revision 1.80 1994/01/26 07:44:43 geoff
- # Make yacc configurable through local.h.
- #
- # Revision 1.79 1994/01/25 07:11:11 geoff
- # Get rid of all old RCS log lines in preparation for the 3.1 release.
- #
- #
-
- #
- # !!!DO NOT EDIT HERE!!!
- #
- # Unlike previous versions of ispell, there should be no need to edit
- # your Makefile. Instead, #define the corresponding variables in your
- # local.h file; the Makefile will automatically pick them up. The
- # only reason you should need to edit the Makefile might to be to add
- # non-English dictionary support.
- #
- # For example, if you want to set CFLAGS to "-g -Wall", don't put it
- # here. Put:
- #
- # #define CFLAGS "-g -Wall"
- #
- # in local.h. Otherwise, it won't have any effect.
- #
- EXTRADICT = Use_config.sh
-
- SHELL = /bin/sh
- MAKE = make
-
- #
- # Set this to "-vx" in the make command line if you need to
- # debug the complex shell commands.
- #
- SHELLDEBUG = +vx
-
- all: unpacked
- all: config.sh
- all: programs ispell.1 ispell.info
- all: all-languages
-
- programs: buildhash findaffix tryaffix ispell
- programs: icombine ijoin munchlist
- programs: subset sq unsq zapdups
-
- .c.o:
- @. ./config.sh; \
- set -x; \
- $$CC $$CFLAGS -c $<
-
- .y.o:
- @. ./config.sh; \
- set -x; \
- $$YACC $<; \
- $$CC $$CFLAGS -c y.tab.c; \
- mv y.tab.o $@; \
- rm -f y.tab.c
-
- all-languages: munchable
- $(MAKE) LANGUAGE_TARGET=all SHELLDEBUG=$(SHELLDEBUG) language-subdirs
-
- install: config.sh all install-basic install-dictbuild install-languages
-
- partial-install: config.sh all install-basic install-languages
-
- install-basic:
- @. ./config.sh; \
- set -x; \
- [ -d $$BINDIR ] || (mkdir $$BINDIR; chmod 755 $$BINDIR); \
- cd $$BINDIR; \
- rm -f ispell
- @. ./config.sh; \
- set -x; \
- $$INSTALL ispell $$BINDIR
- @. ./config.sh; \
- set -x; \
- cd $$BINDIR; \
- strip ispell; \
- chmod 755 ispell
- @. ./config.sh; \
- set -x; \
- [ -d $$MAN1DIR ] || (mkdir $$MAN1DIR; chmod 755 $$MAN1DIR); \
- [ -d $$MAN4DIR ] || (mkdir $$MAN4DIR; chmod 755 $$MAN4DIR); \
- cd $$MAN1DIR; \
- rm -f ispell$$MAN1EXT; \
- cd $$MAN4DIR; \
- rm -f ispell$$MAN4EXT
- @. ./config.sh; \
- set -x; \
- $$INSTALL ispell.1 $$MAN1DIR/ispell$$MAN1EXT; \
- $$INSTALL ispell.4 $$MAN4DIR/ispell$$MAN4EXT
- @. ./config.sh; \
- set -x; \
- cd $$MAN1DIR; \
- chmod 644 ispell$$MAN1EXT; \
- cd $$MAN4DIR; \
- chmod 644 ispell$$MAN4EXT
- @set +e; \
- . ./config.sh; \
- set $(SHELLDEBUG); \
- if [ -d $$TEXINFODIR -a -r ispell.info ]; then \
- set -ex; \
- rm -f $$TEXINFODIR/ispell; \
- $$INSTALL ispell.info $$TEXINFODIR/ispell; \
- chmod 644 $$TEXINFODIR/ispell; \
- else \
- : ; \
- fi
- @set +e; \
- . ./config.sh; \
- set $(SHELLDEBUG); \
- if [ -d $$ELISPDIR ]; then \
- set -ex; \
- rm -f $$ELISPDIR/ispell.el; \
- $$INSTALL ispell.el $$ELISPDIR; \
- if iwhich $$EMACS >/dev/null; then \
- echo '(byte-compile-file "'"$$ELISPDIR/ispell.el"'")' \
- > /tmp/emi$$$$; \
- $$EMACS -nw -batch -l /tmp/emi$$$$; \
- rm -f /tmp/emi$$$$; \
- chmod 644 $$ELISPDIR/ispell.el $$ELISPDIR/ispell.elc; \
- else \
- chmod 644 $$ELISPDIR/ispell.el; \
- fi; \
- else \
- : ; \
- fi
-
- install-dictbuild:
- @. ./config.sh; \
- set -x; \
- [ -d $$BINDIR ] || (mkdir $$BINDIR; chmod 755 $$BINDIR); \
- cd $$BINDIR; \
- rm -f buildhash icombine ijoin \
- munchlist findaffix tryaffix sq unsq; \
- rm -f $$LIBDIR/icombine
- @. ./config.sh; \
- set -x; \
- $$INSTALL buildhash icombine ijoin munchlist findaffix tryaffix \
- sq unsq \
- $$BINDIR
- @. ./config.sh; \
- set -x; \
- cd $$BINDIR; \
- strip buildhash icombine ijoin sq unsq; \
- chmod 755 buildhash icombine ijoin \
- munchlist findaffix tryaffix sq unsq
- @. ./config.sh; \
- set -x; \
- [ -d $$MAN1DIR ] || (mkdir $$MAN1DIR; chmod 755 $$MAN1DIR); \
- [ -d $$MAN4DIR ] || (mkdir $$MAN4DIR; chmod 755 $$MAN4DIR); \
- cd $$MAN1DIR; \
- rm -f sq$$MAN1EXT
- @. ./config.sh; \
- set -x; \
- $$INSTALL sq.1 $$MAN1DIR/sq$$MAN1EXT; \
- for m in buildhash munchlist findaffix tryaffix; do \
- echo ".so `basename $$MAN1DIR`/ispell$$MAN1EXT" \
- > $$MAN1DIR/$$m$$MAN1EXT; \
- done; \
- echo ".so `basename $$MAN1DIR`/sq$$MAN1EXT" \
- > $$MAN1DIR/unsq$$MAN1EXT
- @. ./config.sh; \
- set -x; \
- cd $$MAN1DIR; \
- chmod 644 sq$$MAN1EXT buildhash$$MAN1EXT \
- munchlist$$MAN1EXT findaffix$$MAN1EXT tryaffix$$MAN1EXT
-
- install-languages:
- $(MAKE) LANGUAGE_TARGET=install SHELLDEBUG=$(SHELLDEBUG) \
- language-subdirs
- . ./config.sh; \
- [ -d $$LIBDIR ] || (mkdir $$LIBDIR; chmod 755 $$LIBDIR); \
- set -x; \
- cd $$LIBDIR; \
- rm -f $$DEFHASH; \
- ln $$MASTERHASH $$DEFHASH
-
- ispell.info: config.sh ispell.texinfo
- set +e; \
- . ./config.sh; \
- set $(SHELLDEBUG); \
- if [ -d $$TEXINFODIR ]; then \
- if iwhich makeinfo >/dev/null \
- && makeinfo ispell.texinfo 2>/dev/null; then \
- :; \
- elif iwhich $$EMACS >/dev/null; then \
- set -e; \
- $$EMACS -batch dummy -i ispell.texinfo \
- -f texinfo-format-buffer -f save-buffer; \
- fi; \
- rm -f ispell.info~; \
- else \
- : ; \
- fi
-
- munchable: findaffix tryaffix munchlist buildhash ispell icombine
- munchable: ijoin
- munchable: sq unsq
-
- #
- # The following auxiliary dependency is used to make targets in
- # the language directories. Do you find it intimidating? No
- # surprise; remember that this is by the guy who wrote munchlist.
- #
- LANGUAGE_TARGET = Do_not_try_to_make_this_target_yourself
- BUILD = build
- CBUILD = build
- DBUILD = build
-
- language-subdirs: config.sh
- @. ./config.sh; \
- set $(SHELLDEBUG); \
- set +e; \
- while [ "X$$LANGUAGES" != X ]; do \
- ( \
- descriptor=`echo "$$LANGUAGES" \
- | sed 's/[^{]*{\([^}]*\)}.*/\1/'`; \
- dir=`echo "$$descriptor" | sed 's/\([^,]*\).*/\1/'`; \
- descriptor=`echo "$$descriptor" \
- | sed 's/[^,]*,*\(.*\).*/\1/'`; \
- makeargs=''; \
- while [ "X$$descriptor" != X ]; \
- do \
- nextvar=`echo "$$descriptor" | sed 's/\([^,]*\).*/\1/'`; \
- makeargs="$$makeargs '$$nextvar'"; \
- descriptor=`echo "$$descriptor" \
- | sed 's/[^,]*,*\(.*\).*/\1/'`; \
- done; \
- set -x; \
- cd languages/$$dir; \
- eval $(MAKE) BUILD=$(BUILD) DBUILD=$(DBUILD) CBUILD=$(CBUILD) \
- SHELLDEBUG=$(SHELLDEBUG) "$$makeargs" $(LANGUAGE_TARGET) \
- || exit 1; \
- ) || exit 1; \
- LANGUAGES=`echo "$$LANGUAGES" \
- | sed 's/[^{]*{[^}]*}[^{]*\(.*\)$$/\1/'`; \
- case "$$LANGUAGES" in \
- ''|*{*}*) \
- ;; \
- *) \
- echo "Bad language specification: '$$LANGUAGES'" \
- 1>&2; \
- exit 2 \
- ;; \
- esac; \
- done; \
- exit 0
-
- buildhash: config.sh buildhash.o hash.o makedent.o parse.o version.o
- @. ./config.sh; \
- set -x; \
- $$CC $$CFLAGS -o buildhash buildhash.o hash.o makedent.o parse.o \
- version.o $$LIBES
-
- icombine: config.sh icombine.o makedent.o parse.o
- . ./config.sh; \
- set -x; \
- $$CC $$CFLAGS -o icombine icombine.o makedent.o parse.o \
- $$LIBES
-
- ijoin: config.sh ijoin.o fields.o
- @. ./config.sh; \
- set -x; \
- $$CC $$CFLAGS -o ijoin ijoin.o fields.o $$LIBES
-
- EDITFILE = notthere
- OUTFILE = /dev/null
-
- config.sh: config.X local.h
- set $(SHELLDEBUG); \
- for var in BINDIR CC CFLAGS COUNTSUFFIX DEFDICT DEFHASH DEFLANG \
- ELISPDIR EMACS HASHSUFFIX INSTALL \
- LANGUAGES LIBDIR LIBES LINT LINTFLAGS \
- MAKE_SORTTMP MAN1DIR MAN1EXT MAN4DIR MAN4EXT MASTERHASH \
- MSGLANG REGLIB STATSUFFIX \
- TERMLIB TEXINFODIR YACC \
- ; do \
- cat config.X local.h \
- | sed -n -e "s/^#define[ ]*$$var[ ]*"'"'"/$$var=/p" \
- | sed -e 's/".*$$/'"'/" -e "s/=/='/" \
- | tail -1; \
- done > config.sh
- echo 'case "$$MAKE_SORTTMP" in "") \
- SORTTMP="-e /!!SORTTMP!!/s/=.*$$/=/";; *) SORTTMP=;; esac' \
- >> config.sh
-
- doedit:
- . ./config.sh; \
- sed -e "s@!!LIBDIR!!@$$LIBDIR@" -e "s@!!DEFDICT!!@$$DEFDICT@" \
- -e "s@!!DEFHASH!!@$$DEFHASH@" -e "s@!!DEFLANG!!@$$DEFLANG@" \
- -e "s@!!COUNTSUFFIX!!@$$COUNTSUFFIX@g" \
- -e "s@!!HASHSUFFIX!!@$$HASHSUFFIX@g" \
- -e "s@!!STATSUFFIX!!@$$STATSUFFIX@g" \
- $$SORTTMP < $(EDITFILE) > $(OUTFILE)
-
- findaffix: findaffix.X config.sh
- @$(MAKE) EDITFILE=findaffix.X OUTFILE=findaffix doedit
- chmod +x findaffix
-
- ispell.1: ispell.1X config.sh
- @$(MAKE) EDITFILE=ispell.1X OUTFILE=ispell.1 SHELLDEBUG=$(SHELLDEBUG) \
- doedit
-
- munchlist: munchlist.X config.sh
- @$(MAKE) EDITFILE=munchlist.X OUTFILE=munchlist \
- SHELLDEBUG=$(SHELLDEBUG) doedit
- chmod +x munchlist
-
- subset: subset.X config.sh
- @$(MAKE) EDITFILE=subset.X OUTFILE=subset SHELLDEBUG=$(SHELLDEBUG) \
- doedit
- chmod +x subset
-
- tryaffix: tryaffix.X config.sh
- @$(MAKE) EDITFILE=tryaffix.X OUTFILE=tryaffix \
- SHELLDEBUG=$(SHELLDEBUG) doedit
- chmod +x tryaffix
-
- zapdups: zapdups.X config.sh
- @$(MAKE) EDITFILE=zapdups.X OUTFILE=zapdups SHELLDEBUG=$(SHELLDEBUG) \
- doedit
- chmod +x zapdups
-
- OBJS = amiga.o minrexx.o term.o ispell.o correct.o defmt.o dump.o good.o lookup.o \
- hash.o makedent.o tgood.o tree.o xgets.o version.o
-
- ispell: config.sh $(OBJS)
- @. ./config.sh; \
- set -x; \
- $$CC $$CFLAGS -o ispell $(OBJS) $$TERMLIB $$REGLIB $$LIBES
-
- # Since some makes don't have appropriate built-in rules, here are
- # dependencies for sq and unsq. Sigh.
- sq: config.sh msgs.h sq.c
- @. ./config.sh; \
- set -x; \
- $$CC $$CFLAGS -o sq sq.c
-
- unsq: config.sh msgs.h unsq.c
- @. ./config.sh; \
- set -x; \
- $$CC $$CFLAGS -o unsq unsq.c
-
- $(OBJS) buildhash.o icombine.o hash.o parse.o: config.h ispell.h local.h
- $(OBJS) buildhash.o icombine.o hash.o parse.o: proto.h msgs.h
- ijoin.o: config.h ispell.h local.h
- ijoin.o: proto.h fields.h
-
- config.h: config.X local.h
- cp config.X config.h
- chmod u+w config.h
- echo '' >> config.h
- echo '/* AUTOMATICALLY-GENERATED SYMBOLS */' >> config.h
- cat local.h config.X \
- | egrep '^#define[ ]*SIGNAL_TYPE' \
- | sed -e 's/TYPE[ ]*/TYPE_STRING "/' -e 's/$$/"/' -e 1q \
- >> config.h
- cat local.h config.X \
- | egrep '^#define[ ]*MASKTYPE' \
- | sed -e 's/TYPE[ ]*/TYPE_STRING "/' -e 's/$$/"/' -e 1q \
- >> config.h
-
- # Create a sample local.h if no such file currently exists
- local.h:
- set +e; [ -r local.h ] || cp local.h.samp local.h
-
- msgs.h: config.sh FRC
- @. ./config.sh; \
- set $(SHELLDEBUG); \
- set +e; \
- if [ -r languages/$$MSGLANG/msgs.h ]; then \
- msgs=languages/$$MSGLANG/msgs.h; \
- else \
- msgs=languages/english/msgs.h; \
- fi; \
- if cmp -s msgs.h $$msgs; then \
- :; \
- else \
- set -x; \
- rm -f msgs.h; ln $$msgs msgs.h || cp $$msgs msgs.h; \
- fi
-
- FRC:
-
- tags: config.h *.[chy]
- ctags -w -t *.[chy]
- sed -e s/config.h/config.X/ tags > ntags
- mv ntags tags
-
- TAGS: config.h *.[chy]
- etags *.[chy]
- sed -e s/config.h/config.X/ TAGS > NTAGS
- mv NTAGS TAGS
-
- lint: languages/*/msgs.h
- lint: config.sh config.h ispell.h proto.h *.[cy]
- @. ./config.sh; \
- $$LINT $$LINTFLAGS ispell.c correct.c defmt.c dump.c good.c \
- hash.c lookup.c makedent.c tgood.c term.c tree.c xgets.c; \
- $$YACC parse.y; \
- $$LINT $$LINTFLAGS buildhash.c hash.c makedent.c y.tab.c; \
- $$LINT $$LINTFLAGS icombine.c makedent.c y.tab.c; \
- $$LINT $$LINTFLAGS ijoin.c fields.c
- @rm -f y.tab.c
-
- clean: config.sh clean-languages
- @. ./config.sh; \
- set -x; \
- rm -f $$DEFHASH $$FOREIGNHASHES
- rm -f *.o core a.out mon.out hash.out y.tab.c *.stat *.cnt \
- config.h msgs.h
- rm -f buildhash findaffix tryaffix ispell icombine ijoin \
- munchlist subset sq unsq zapdups ispell.1 ispell.info
-
- clean-languages:
- $(MAKE) LANGUAGE_TARGET=clean SHELLDEBUG=$(SHELLDEBUG) language-subdirs
-
- realclean veryclean: clean dictclean
- rm -f config.sh
-
- #
- # The following dependency can be executed when ispell is unpacked,
- # to unpack the dictionaries.
- #
- unpack: unsq
- $(MAKE) LANGUAGE_TARGET=unpack SHELLDEBUG=$(SHELLDEBUG) \
- language-subdirs
-
- unpacked:
- $(MAKE) SHELLDEBUG=$(SHELLDEBUG) unpack
- touch unpacked
-
- #
- # The following target allows you to clean out the leftover raw
- # files gotten from unpacking the kit. It makes sure that you
- # have the combined files first, so it may take a little while
- # to run.
- #
- kitclean: unsq
- $(MAKE) LANGUAGE_TARGET=kitclean SHELLDEBUG=$(SHELLDEBUG) \
- language-subdirs
-
- #
- # The following target allows you to clean out the combined
- # dictionary files. For safety, so you don't lose your files,
- # it makes sure that there is something to work from, but it can
- # only be so smart, so be careful!
- #
- dictclean:
- $(MAKE) LANGUAGE_TARGET=dictclean SHELLDEBUG=$(SHELLDEBUG) \
- language-subdirs
-